package stmo.排序算法;


import java.util.Arrays;

/**
 *      选择排序
 */


public class Selection {

    //对数组内的元素进行排序
    public static void sort(Comparable[] a) {
        for(int i = 0;i < a.length-1;i++) {
            //定义一个变量，记录最小元素所在的索引，默认为参与选择排序的第一个元素所在的位置
            int min = i;
            //找出最小值的索引
            for(int j = i+1;j < a.length;j++) {
                //比较最小索引min处的值和j索引处的值
                if(greater(a[min],a[j])) {
                    min = j;
                }
            }
            //交换最小元素所在索引min处的值和索引i处的值
            if(min != i) {
                exch(a, min, i);
            }
        }
    }

    //判断v是否大于w
    private static boolean greater(Comparable v,Comparable w) {
        return v.compareTo(w) > 0;
    }

    //交换a数组中，索引i和索引j处的值
    private static void exch(Comparable[] a,int i,int j) {
        Comparable t;
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    public static void main(String[] args) {

        // Integer extends Number implements Comparable<Integer>,不能是int类型数组
        Integer[] arr = {13,5,1,7,2,3,4,8,9,10};
        Selection.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

}
